/**
 * 应用启动管理器
 * 用于检测应用新启动并重置相关标记
 */

import { StorageUtils } from './storage.js'

export class AppLaunchManager {
    constructor(options = {}) {
        this.resetInterval = options.resetInterval || 3600000 // 默认1小时
        this.flagsToReset = options.flagsToReset || [
            'box6_seen',
            'box7_seen',
            'box8_seen',
            'box9_seen',
            'box10_seen',
            'box11_seen',
            'box12_seen',
            'box13_seen',
            'box14_seen'
        ]
        this.launchTimeKey = options.launchTimeKey || 'app_last_launch_time'
        this.isInitialized = false
    }

    /**
     * 检查是否是应用新启动
     * @returns {boolean} 是否是应用新启动
     */
    isAppFirstLaunch() {
        const lastLaunchTime = StorageUtils.getData(this.launchTimeKey, null)
        const currentTime = new Date().getTime()

        // 如果从未启动过，或者距离上次启动超过设定时间，认为是新启动
        if (!lastLaunchTime || (currentTime - lastLaunchTime) > this.resetInterval) {
            StorageUtils.setData(this.launchTimeKey, currentTime)
            return true
        }

        StorageUtils.setData(this.launchTimeKey, currentTime)
        return false
    }

    /**
     * 重置指定的标记
     * @param {Array} flags 要重置的标记数组，如果不传则使用默认的
     */
    resetFlags(flags = null) {
        const flagsToReset = flags || this.flagsToReset

        flagsToReset.forEach(flag => {
            StorageUtils.removeData(flag)
        })

        console.log(`应用启动标记已重置: ${flagsToReset.join(', ')}`)
    }

    /**
     * 检查并重置应用启动状态
     * @param {Array} customFlags 自定义要重置的标记
     * @returns {boolean} 是否执行了重置
     */
    checkAndReset(customFlags = null) {
        if (this.isAppFirstLaunch()) {
            this.resetFlags(customFlags)
            return true
        }
        return false
    }

    /**
     * 添加需要重置的标记
     * @param {string|Array} flags 要添加的标记
     */
    addFlagsToReset(flags) {
        if (Array.isArray(flags)) {
            this.flagsToReset.push(...flags)
        } else {
            this.flagsToReset.push(flags)
        }
    }

    /**
     * 移除不需要重置的标记
     * @param {string|Array} flags 要移除的标记
     */
    removeFlagsToReset(flags) {
        if (Array.isArray(flags)) {
            this.flagsToReset = this.flagsToReset.filter(flag => !flags.includes(flag))
        } else {
            this.flagsToReset = this.flagsToReset.filter(flag => flag !== flags)
        }
    }

    /**
     * 获取当前所有需要重置的标记
     * @returns {Array} 标记数组
     */
    getFlagsToReset() {
        return [...this.flagsToReset]
    }

    /**
     * 设置重置时间间隔
     * @param {number} interval 时间间隔（毫秒）
     */
    setResetInterval(interval) {
        this.resetInterval = interval
    }

    /**
     * 强制重置所有标记（不检查启动时间）
     * @param {Array} customFlags 自定义要重置的标记
     */
    forceReset(customFlags = null) {
        this.resetFlags(customFlags)
        console.log('强制重置完成')
    }

    /**
     * 获取上次启动时间
     * @returns {Date|null} 上次启动时间
     */
    getLastLaunchTime() {
        const timestamp = StorageUtils.getData(this.launchTimeKey, null)
        return timestamp ? new Date(timestamp) : null
    }

    /**
     * 获取距离上次启动的时间（毫秒）
     * @returns {number} 时间差
     */
    getTimeSinceLastLaunch() {
        const lastLaunch = this.getLastLaunchTime()
        if (!lastLaunch) return Infinity
        return new Date().getTime() - lastLaunch.getTime()
    }
}

// 创建默认实例
export const appLaunchManager = new AppLaunchManager()

// 便捷函数
export const checkAppLaunch = (customFlags = null) => {
    return appLaunchManager.checkAndReset(customFlags)
}

export const forceResetFlags = (customFlags = null) => {
    return appLaunchManager.forceReset(customFlags)
}

export const addFlagsToReset = (flags) => {
    return appLaunchManager.addFlagsToReset(flags)
}

// 使用示例：
/*
// 基本使用
import { checkAppLaunch } from '@/utils/app-launch-manager.js'

onMounted(() => {
    const isNewLaunch = checkAppLaunch()
    if (isNewLaunch) {
        console.log('应用新启动，标记已重置')
    }
})

// 自定义重置标记
const isNewLaunch = checkAppLaunch(['custom_flag1', 'custom_flag2'])

// 使用管理器实例
import { appLaunchManager } from '@/utils/app-launch-manager.js'

// 添加新的重置标记
appLaunchManager.addFlagsToReset('new_flag')

// 设置重置时间间隔为30分钟
appLaunchManager.setResetInterval(30 * 60 * 1000)

// 检查并重置
const isNewLaunch = appLaunchManager.checkAndReset()
*/

